Создать таблицу сессий auth_db.sessions

Развертывание структуры хранения долгоживущих refresh-сессий

Author

Services Task & Simulation Framework Documentation

Published

July 13, 2026

NoteКраткая карточка задачи
  • Репозиторий / Компонент: auth-service (База auth_db, контур Identity & Auth / SECURITY).
  • Целевая СУБД: PostgreSQL v15+.
  • Ссылка на Метод: Спецификация POST /register
  • Статус: Готово к реализации

WarningОграничение публичной документации

In accordance with internal security guidelines, this ticket displays a deployment-ready snapshot of the database architecture. Advanced trace metadata fields and compliance security schemas are accessible only within the internal staging perimeter.

  • Полная спецификация метода: Доступна только во внутреннем контуре разработки (Confluence / Swagger Enterprise).
  • Для получения доступа: Обратитесь к системному аналитику или Product Owner вашей команды.

  • Инструкция по шагам: Выполнить DDL-миграцию для создания таблицы реестра выданных долгоживущих refresh-сессий (sessions) [2026-07-02].

    ImportantВнимание: Архитектурное ограничение

    В целях соблюдения принципов микросервисной изоляции (Shared-Nothing Architecture), поле user_id объявляется как плоский идентификатор БЕЗ создания физического внешнего ключа (FOREIGN KEY / REFERENCES) на таблицу пользователей. Логическая валидация существования субъекта должна производиться исключительно на уровне прикладного кода сервиса.

    В соответствии со спецификацией безопасности, в базу записывается строго криптографический хэш рефреш-токена (SHA-256), а не его сырое значение.

-- Скрипт DDL-миграции для реестра сессий auth_db.sessions
CREATE TABLE IF NOT EXISTS auth_db.sessions (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    user_id UUID NOT NULL,                     -- Плоский ID без внешних ключей для изоляции микросервисов
    token_hash VARCHAR(64) UNIQUE NOT NULL,    -- SHA-256 хэш от Refresh Token
    device_fingerprint VARCHAR(255),           -- Для контроля контекста и Breach Detection
    ip_address VARCHAR(45),
    is_revoked BOOLEAN DEFAULT false,          -- Изменяется на true при Logout или компрометации
    expires_at TIMESTAMP WITH TIME ZONE NOT NULL,
    created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
    updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);

-- Индексы для оптимизации валидации и ротации токенов на Шаге 9 (Ответ шлюза)
CREATE INDEX IF NOT EXISTS idx_sessions_token_lookup 
ON auth_db.sessions (token_hash) 
WHERE is_revoked = false AND expires_at > NOW();

CREATE INDEX IF NOT EXISTS idx_sessions_user_active 
ON auth_db.sessions (user_id) 
WHERE is_revoked = false;